package com.whosly.disclosure.early.handler.hutu.service.impl;

import cn.hutool.core.date.SystemClock;
import com.whosly.api.autoconfigure.context.SpringContextAwareHolder;
import com.whosly.disclosure.early.handler.hutu.service.IDemoService;
import com.whosly.disclosure.early.handler.spi.ErrorHandler;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.Map;
import java.util.ServiceLoader;

@Service
public class DemoServiceImpl implements IDemoService {
//    @Resource
//    private ErrorHandler errorHandler;

    @Override
    public Date nowDate() {
        return new Date();
    }

    @Override
    public Long nowLong() {
        return SystemClock.now();
    }

    @Override
    public ErrorHandler get() {
        ErrorHandler handler = null;

        Map<String, ErrorHandler> handlerMaps = SpringContextAwareHolder.getContext()
                .getBeansOfType(ErrorHandler.class);
        handlerMaps.entrySet().forEach(f -> {
            // 消息即可根据 type 的类型，对应发出
            f.getValue().handleException("问题反馈",
                    new IllegalArgumentException("无法创建对应进程。加载系统上下文失败"));

            f.getValue().handleMsg("问题反馈", "无法创建对应进程。加载系统上下文失败");
        });

        // spi 加载的 实现
        // 每次 ServiceLoader.load 都会获取到一次实例。即使存在这个对象的实例，也会new
//        for (ErrorHandler each : ServiceLoader.load(ErrorHandler.class)) {
//            System.out.println(each);
//        }

        return handler;
    }

}
